home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 32
/
Amiga Format AFCD32 (Nov 1998, Issue 117).iso
/
-seriously_amiga-
/
programming
/
e
/
newgui
/
src
/
plugins
/
pl_dndexample.e
< prev
next >
Wrap
Text File
|
1998-08-10
|
4KB
|
111 lines
OPT OSVERSION = 37
OPT MODULE
MODULE 'graphics/rastport'
MODULE 'graphics/text'
MODULE 'intuition/intuition'
MODULE 'newgui/newgui'
MODULE 'newgui/ng_dnd_xchange'
MODULE 'newgui/ng_performdnd'
MODULE 'tools/ghost'
MODULE 'tools/textlen'
EXPORT OBJECT dndplug OF plugin
dnd_act:INT
minwidth:INT
minheight:INT
ENDOBJECT
PROC min_size(ta,fh) OF dndplug IS self.minwidth,self.minheight
PROC will_resize() OF dndplug IS FALSE
PROC render(ta:PTR TO textattr,x,y,xs,ys,win:PTR TO window) OF dndplug
DEF len=0,
tex:textextent
IF (ta=NIL) -> Wenn der Aufruf von unserer eigenen Prozedur erfolgte!
ta:=self.gh.tattr
x:=self.x
y:=self.y
xs:=self.xs
ys:=self.ys
win:=self.gh.wnd
ENDIF
IF (self.dnd_image<>NIL)
DrawImage(win.rport,self.dnd_image,x,y) -> Image rendern
ELSEIF (self.dnd_text<>NIL)
SetABPenDrMd(win.rport,1,0,RP_JAM2)
Move(win.rport,x,y+ta.ysize-3)
TextExtent(win.rport,self.dnd_text,self.dnd_textlen,tex)
len:=TextFit(win.rport,self.dnd_text,self.dnd_textlen,tex,NIL,1,xs,256)
Text(win.rport,self.dnd_text,len)
ENDIF
IF self.dis=TRUE THEN ghost(win,x,y,xs,ys)
ENDPROC
PROC clear_render(win:PTR TO window) OF dndplug -> Unser Image löschen (z.B bei Window-Resizeing!
SetABPenDrMd(win.rport,0,0,RP_JAM1)
RectFill(win.rport,self.x,self.y,(self.x+self.xs),(self.y+self.ys)) -> Hintergrund löschen
ENDPROC
PROC disable(bool) OF dndplug -> Unser Plugin soll disabled werden!
DEF len=0,
tex:PTR TO textextent
self.dis:=bool
IF self.dis=TRUE
ghost(self.gh.wnd,self.x,self.y,self.xs,self.ys)
ELSE
IF (self.dnd_image<>NIL)
DrawImage(self.gh.wnd.rport,self.dnd_image,self.x,self.y)
ELSE
SetABPenDrMd(self.gh.wnd.rport,1,0,RP_JAM2)
Move(self.gh.wnd.rport,self.x,self.y+self.gh.tattr.ysize-3)
TextExtent(self.gh.wnd.rport,self.dnd_text,self.dnd_textlen,tex)
len:=TextFit(self.gh.wnd.rport,self.dnd_text,self.dnd_textlen,tex,NIL,1,self.xs,256)
Text(self.gh.wnd.rport,self.dnd_text,len)
ENDIF
ENDIF
ENDPROC
-> Drag 'N' Drop-Spezifische Prozeduren
PROC dnd(type,img,selimg,minwidth,minheight,str,num,act,proc) OF dndplug
self.type:=type -> Der Typ der Box (Dragbox, dropbox, drag&drop-box) MUß IMMER gesetzt werden!
self.dnd_info:=DND_INFO_NODATA -> Standarttyp setzen
IF (img<>NIL) -> Wenn ein Image übergeben wurde
self.dnd_image:=img -> Dieses ins Plugin speichern
self.dnd_info:=DND_INFO_IMAGE -> Zeigt an, daß wir ein Image zum Anzeigen haben!
IF (selimg<>NIL)
self.dnd_selectimage:=selimg
ELSE
self.dnd_selectimage:=img
ENDIF
ENDIF
IF (str<>NIL) -> Wenn ein String/Text angegeben wurde
self.dnd_text:=str -> Diesen Speichern
self.dnd_info:=self.dnd_info + DND_INFO_TEXT -> Und zur Info hinzufügen, daß ein String verfügbar ist!
self.dnd_textlen:=StrLen(str)
ENDIF
self.dnd_num:=num
self.dnd_proc:=proc
self.dnd_act:=act
self.minwidth:=minwidth
self.minheight:=minheight
ENDPROC
PROC dnd_xchange(plug,called) OF dndplug
DEF action
action:=ng_dnd_xchange(self,called,self.dnd_act)
IF called=FALSE
ng_setattrsA([
NG_GUI, self.gh,
NG_REDRAW, self,
NIL, NIL])
ng_setattrsA([
NG_GUI, self.gh,
NG_REDRAW, self.dnd_dest,
NIL, NIL])
ENDIF
ENDPROC action
PROC performdnd(win:PTR TO window) OF dndplug IS ng_performdnd(win,self)